﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Negocio;
using System.Data;
using System.Data.Entity;
using Capa_Datos;
using System.Data.Objects;



namespace Capa_Negocio
{
    public class familiaCN
    {

        #region procesos publicos
       
        #endregion
        #region mantenimientos
        public int AltaFamilia(familia oFamilia)
        {
            //Hace el alta de una familia en la BBDD, devuelve el numero de registros afectados
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {
                oCon.AddTofamilia(oFamilia);
                return oCon.SaveChanges();
            }
        }
        public int BajaFamilia(familia oFamilia)
        {
            //hace una baja de una familia en la BBDD, devuelve el numero de registros afectados
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {//Cuando vayamos a hacer la baja tendremos que controlar que la familia no esta asociada a ningun ciclo o usuario 
                familia borrado =(from f in oCon.familia where f.Id_familia==oFamilia.Id_familia select f).First();
                oCon.DeleteObject(borrado);
                return oCon.SaveChanges();
            }
        }
        public int ModiFamilia(familia oFamilia)
        {
            using(ProyectoCIFP oCon = new ProyectoCIFP())
            {
                familia modificado = (from f in oCon.familia where f.Id_familia == oFamilia.Id_familia select f).First();
                modificado.Nombre = oFamilia.Nombre;
                return oCon.SaveChanges();
            }
        }
        #endregion
        #region consultas

        public List<familia> Todos()
        {//Para sacar todas las familias
            using(ProyectoCIFP oCon = new ProyectoCIFP())//hacemos la conexion
            {
       
                IQueryable<familia> nombresFamilias = //lista de familia con IQueryable
                    from f in oCon.familia
                     select f;
                return nombresFamilias.ToList();//lo convertimos a lista para tipificarlo 
            }
        }
        public List<familia> General(familia oFamilia)
        {//Metodo de filtrado general simulando la creacion de una sentencia SQL
            
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {
                IQueryable<familia> famis;
                IQueryable<familia> fgeneral;
                IQueryable<familia> famis1;
           
                fgeneral = from f in oCon.familia select f;
               
                if (oFamilia.Id_familia != 0)
                {
                    famis =
                             from f in oCon.familia
                             where f.Id_familia == oFamilia.Id_familia
                             select f;
                    fgeneral = fgeneral.Intersect(famis);
                }
                if (oFamilia.Nombre != "")
                {
                    famis1 =
                           from f in oCon.familia
                           where f.Nombre.Contains(oFamilia.Nombre)
                           select f;
                    fgeneral = fgeneral.Intersect(famis1);
                }
                return fgeneral.ToList();
            }
        }
            public familia NombreF(int id)
            {
                using (ProyectoCIFP oCon = new ProyectoCIFP())
                {
                    familia fami = new familia();
                    familiaCN fm = new familiaCN();
                    fami =(from f in oCon.familia
                                 where f.Id_familia == id
                                 select f).First();
                    return fami;
                }
            }
            public familia IdFamilia(String nom)
            {
                using (ProyectoCIFP oCon = new ProyectoCIFP())
                {
                    familia fami = new familia();
                    familiaCN fm = new familiaCN();
                    fami = (from f in oCon.familia
                            where f.Nombre == nom
                            select f).First();
                    return fami;
                }
            }
                 
        }

        #endregion
        #region procesos privados
        #endregion

    }
